package functioninterface;

// 函数式接口：有且只有一个抽象方法
// 抽象方法没有{}

import java.util.Comparator;
import java.util.PriorityQueue;

// 普通接口：
interface commonA {
    void test1();
    void test2();
    void test3();
}

//函数式接口：最好@进行申明
@FunctionalInterface
interface funA {
    void test();

    // 后面的普通方法都可以存在！
    // 只是抽象方法只能有一个
    public static void test1() {

    }
    default void test2() {

    }
}

public class Test {
    public static void main(String[] args) {
        // 优先级队列，默认是小根堆
        // 如何变成大根堆：new Comparator
        // Comparator是抽象的，不能被实例化，所以new Comparator；是错误的。
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

        // 使用Lambda表达式
        PriorityQueue<Integer> priorityQueue2 = new PriorityQueue<>((o1,o2)->{return o2-o1;});
        PriorityQueue<Integer> priorityQueue3 = new PriorityQueue<>((o1,o2)-> o2-o1);

    }
    // 此时相当于一个类实现了Comparator接口，同时重写了抽象方法：compare

}
